package com.lagou.utils;

import java.io.File;
import java.util.List;
import java.util.Map;

public class FileUtils {
    /**
     * 根据包名和文件地址扫描Java的.class文件
     *
     * @param pkgName    包名
     * @param pkgPath    包的路径
     * @param excludeDir 需要排除的文件夹
     * @param classes    返回的引用
     * @return Map<类名的首字母小写形态, 类的全限定地址>
     */
    public Map<String, String> scanClassesByPkgNameAndPkgPath(String pkgName, String pkgPath, List<String> excludeDir, Map<String, String> classes) {
        File dir = new File(pkgPath);
        if (!dir.exists() || !dir.isDirectory()) {
            return null;
        }

        // 过滤获取目录，or class文件
        File[] dirfiles = dir.listFiles(pathname -> (pathname.isDirectory() && excludeDir.indexOf(pathname.getName()) < 0) || pathname.getName().endsWith("class"));


        if (dirfiles == null || dirfiles.length == 0) {
            return null;
        }


        String className;
        for (File f : dirfiles) {
            if (f.isDirectory()) {
                scanClassesByPkgNameAndPkgPath(pkgName + "." + f.getName(),
                        pkgPath + "/" + f.getName(), excludeDir, classes);
                continue;
            }
            // 获取类名，去掉 ".class" 后缀
            className = f.getName();
            className = className.substring(0, className.length() - 6);
            classes.put(Character.toLowerCase(className.charAt(0)) + className.substring(1), pkgName + "." + className);
        }
        return classes;
    }
}
